package com.one.system.controll.exam;

import com.one.common.core.controller.BaseController;
import com.one.common.core.domain.R;
import com.one.common.core.domain.TableDataInfo;
import com.one.system.domain.exam.dto.ExamAddDTO;
import com.one.system.domain.exam.dto.ExamEditDTO;
import com.one.system.domain.exam.dto.ExamQueryDTO;
import com.one.system.domain.exam.dto.ExamQuestionAddDTO;
import com.one.system.domain.exam.vo.ExamQuestionVO;
import com.one.system.service.exam.IExamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/exam")
public class ExamController extends BaseController {

    @Autowired
    private IExamService iExamService;

    /**
     *      接口概述  竞赛管理列表功能
     *      接口地址  /exam/list
     *      请求方法  get
     *      请求参数  ExamQueryDTO
     *      响应数据  TableDataInfo
     */
    @GetMapping("/list")
    public TableDataInfo list(ExamQueryDTO examQueryDTO){
        return getTableDataInfo(iExamService.list(examQueryDTO));
    }
    
    /**
     *      接口概述  竞赛管理新增功能  竞赛基本信息的新增
     *      接口地址  /exam/add
     *      请求方法  post
     *      请求参数  examAddDTO
     *      响应数据  void
     */
    @PostMapping("/add")
    public R<String> add(@RequestBody ExamAddDTO examAddDTO){
        return R.ok(iExamService.add(examAddDTO));
    }

    /**
     *      接口概述  竞赛管理新增功能 竞赛题目信息的新增
     *      接口地址  /exam/question/add
     *      请求方法  post
     *      请求参数  examQuestionAddDTO
     *      响应数据  void
     */
    @PostMapping("/question/add")
    public R<Void> questionAdd(@RequestBody ExamQuestionAddDTO examQuestionAddDTO){
        return toR(iExamService.questionAdd(examQuestionAddDTO));
    }

    /**
     *      接口概述   竞赛编辑中删除功能   竞赛里题目的删除
     *      接口地址    /exam/delete
     *      请求方法    /delete
     *      请求参数    examId,questionId
     *      响应数据    void
     */
    @DeleteMapping("/question/delete")
    public R<Void> questionDelete(Long examId, Long questionId){
        return toR(iExamService.questionDelete(examId,questionId));
    }

    /**
     *      接口概述  查询相关竞赛id的详情信息
     *      接口地址  /exam/detail
     *      请求方法  get
     *      请求参数  examId
     *      响应数据  ExamQuestionVO
     */
    @GetMapping("/detail")
    public R<ExamQuestionVO> detail(Long examId){
        return R.ok(iExamService.detail(examId));
    }

    /**
     *      接口概述   竞赛编辑功能
     *      接口地址    /exam/edit
     *      请求方法    /put
     *      请求参数    ExamEditDTO
     *      响应数据    void
     */
    @PutMapping("/edit")
    public R<Void> edit(@RequestBody ExamEditDTO examEditDTO){
        return toR(iExamService.edit(examEditDTO));
    }

    /**
     *      接口概述    竞赛删除功能
     *      接口地址    /exam/delete
     *      请求方法    /delete
     *      请求参数    examId
     *      响应数据    void
     */
    @DeleteMapping("/delete")
    public R<Void> delete(Long examId){
        return toR(iExamService.delete(examId));
    }

    /**
     *      接口概述    竞赛发布功能
     *      接口地址    /exam/publish
     *      请求方法    /get
     *      请求参数    examId
     *      响应数据    void
     */
    @GetMapping("/publish")
    public R<Void> publish(Long examId){
        return toR(iExamService.publish(examId));
    }

    /**
     *      接口概述    竞赛撤销发布功能
     *      接口地址    /exam/cancelPublish
     *      请求方法    /get
     *      请求参数    examId
     *      响应数据    void
     */
    @GetMapping("/cancelPublish")
    public R<Void> cancelPublish(Long examId){
        return toR(iExamService.cancelPublish(examId));
    }
}
